﻿/*
 *   MiscFunctions.cs
 *   Copyright (c) 2011 - BitFox Software and Ricardo Federico Villafañes
 *   Contact: federvillaf@hotmail.com
 *   
 *   Licensing: This product is covered by Microsoft Reciprocal License (MS-RL)
 *              see https://bitfoxeval.codeplex.com/license
*/

using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Security;
using System.Diagnostics.CodeAnalysis;

using BitFox.Evaluator;

namespace BitFox.Evaluator.Functions
{
    /// <summary>
    /// Built-in miscellaneous functions for the evaluator.
    /// </summary>
    public static class MiscFunctions
    {
        /// <summary>
        /// Determines if the value of an expression lies between the values of two other expressions of the same date type.
        /// </summary>
        /// <param name="exp1">The value to be compared against a given range.</param>
        /// <param name="exp2">The lower or equal value of the range to use.</param>
        /// <param name="exp3">The greater or equal value of the range to use.</param>
        /// <returns>True is returned if the value of <paramref name="exp1"/> is greater than or equal to the value of <paramref name="exp2"/>
        /// and less than or equal to the value of <paramref name="exp3"/>; otherwise, false is returned.</returns>
        /// <remarks>
        /// BETWEEN() returns a value of true if the value of a character, numeric or date expression lies between the 
        /// values of two other expressions of the same data type.  If the value of the expression doesn't lie between the values 
        /// of two other expressions, BETWEEN() returns false.</remarks>
        [SuppressMessage("Microsoft.Performance", "CA1800")]
        static public bool Between(object exp1, object exp2, object exp3)
        {
            if (exp1 is string)
            {
                string s1 = (string)exp1, s2 = (string)exp2, s3 = (string)exp3;
                return s1.FoxCompare(s2, false) >= 0 && s1.FoxCompare(s3, false) <= 0;
            }

            if (exp1 is DateTime)
            {
                DateTime d1 = (DateTime)exp1, d2 = (DateTime)exp2, d3 = (DateTime)exp3;
                return d1.CompareTo(d2) >= 0 && d1.CompareTo(d3) <= 0;
            }

            decimal 
                n1 = FoxConvert.ToDecimal(exp1),
                n2 = FoxConvert.ToDecimal(exp2),
                n3 = FoxConvert.ToDecimal(exp3);

            return n1.CompareTo(n2) >= 0 && n1.CompareTo(n3) <= 0;
        }

        /// <summary>
        /// Determines whether or not an expression is empty.
        /// </summary>
        /// <param name="exp">The expression you include can be a character, numeric, date or logical expression.
        /// EMPTY() returns true when expressions of the following data types contain the indicated data:
        /// <table>
        ///     <tr><td>Data Type</td><td>Contains</td></tr>
        ///     <tr><td>Character</td><td>Nulls, spaces, tabs, carriage returns or line feeds or any combination of these</td></tr>
        ///     <tr><td>Numeric</td><td>0</td></tr>
        ///     <tr><td>Date</td><td>Null (i.e. CTOD(''))</td></tr>
        ///     <tr><td>Logical</td><td>False (.F.)</td></tr>
        /// </table>
        /// </param>
        /// <returns></returns>
        /// <remarks>EMPTY() returns true if the expression in <paramref name="exp"/> is empty.
        /// If the expression isn't empty, EMPTY() returns false.</remarks>
        [SuppressMessage("Microsoft.Performance", "CA1800")]
        static public bool Empty(object exp) 
        {
            // For strings
            if (exp is string)
            {
                foreach (char ch in (string)exp)
                    if (!(char.IsWhiteSpace(ch) || ch == '\r' || ch == '\n'))
                        return false;
                return true;
            }

            // For dates
            if (exp is DateTime)
                return (((DateTime)exp) == DateTime.MinValue);

            // For numbers
            Decimal d = FoxConvert.ToDecimal(exp);
            return (d == 0);
        }


        /// <summary>
        /// Returns a logical true if the specified file is found on file system.
        /// </summary>
        /// <param name="fileName">
        /// The parameter specify the name of the file to locate. It must include the file's extension.
        /// BitFox looks in the current directory for the file.
        /// If the file cannot be found in the current directory, the path established in 'Path' property of evaluator's context
        /// with SET PATH is searched.
        ///	You can include a path with the file name to search for a file in a directory or on a drive other than the current 
        ///	directory or drive.  
        ///	The path established with SET PATH is searched if you specify a path with the file name and 'Compatible' property of
        ///	evaluator's context is set OFF.  When 'Compatible' property is set OFF, drive and directory specifiers are ignored.</param>
        /// <returns>True if the file exist, else, false</returns>
        /// <remarks>Use FILE() to find a file on filesystem.  A true value is returned if the file can be found.
        /// If the file cannot be found, FILE() returns false.</remarks>
        public static bool File(string fileName)
        { 
            return System.IO.File.Exists(fileName); 
        }

        /// <summary>
        /// Returns the contents of the specified Window's environment variable.
        /// </summary>
        /// <param name="variable">
        /// The name of the window's environment variable that will be returned.
        /// The empty string is returned if the window's environment variable doesn't exist.</param>
        /// <returns>The variable's content, or an empty string if the variable doesn't exist.</returns>
        /// <remarks>
        /// Two environment variables are always available - COMSPEC and PATH.
        /// You can create your own environment variables with the window's SET command in a dos box, or through 
        /// control panel. See your window's information for additional information on creating environment variables.
        /// </remarks>
        public static string Getenv(string variable)
        {
            if (variable == null) throw new ArgumentNullException("variable");
            try
            {
                return Environment.GetEnvironmentVariable(variable);
            }
            catch(SecurityException) { return string.Empty; }
        }

        /// <summary>
        /// Returns the current WINDOWS directory.
        /// </summary>
        /// <param name="drive">The current directory is returned for the drive specified by the parameter.
        /// If the drive is omitted, or null, the current default drive is assumed.
        /// The empty string is returned if the specified drive doesn't exist.</param>
        /// <returns>The current folder in indicated drive.</returns>
        /// <remarks>CURDIR() returns, as a string, the current window's directory on a specified drive.
        /// CURDIR() ignores the FoxPro SET PATH values.</remarks>
        [SuppressMessage("Microsoft.Design", "CA1062")]
        public static string Curdir(string drive) 
        {
            if (drive != null && drive.Trim().Length != 0)
                throw new NotImplementedException("Please, leave 'drive' argument as null");
            return Directory.GetCurrentDirectory();
        }

        /// <summary>
        /// Evaluates a string expression and returns the result.
        /// </summary>
        /// <param name="cEnv">The evaluator's environment with needed settings.</param>
        /// <param name="exp">The expression to compile and run.</param>
        /// <returns>The result of evaluating the expression.</returns>
        /// <remarks>
        /// EVALUATE() is similar to TYPE() but returns the result of an expression instead of the expression type.
        /// An expression containing EVALUATE() cannot be optimized.
        /// EVALUATE and name expressions execute faster than macro substitution.  
        /// </remarks>
        public static object Evaluate(CalculatorContext cEnv, string exp) 
        {
            Evaluator eval = new Evaluator(cEnv);
            return eval.Compile(exp).Run();
        }

        /// <summary>
        /// Returns one of two values depending on the value of a logical expression.
        /// </summary>
        /// <param name="expL">The value to determine if exp1 or exp2 must be returned</param>
        /// <param name="exp1">The value to return if expL is true</param>
        /// <param name="exp2">The value to return if expL is false</param>
        /// <returns>The actual value of <paramref name="exp1"/> if <paramref name="expL"/> is true,
        /// else, the content of <paramref name="exp2"/>.</returns>
        /// <remarks>
        /// This function, also known as Immediate IF, evaluates a logical expression and then returns one of two expressions.
        /// If the logical expression evaluates to a true value, IIF() returns the first expression.
        /// If the logical expression evaluates to a false value IIF() returns the second expression.
        /// <b>HOT TIP</b>
        /// This function can be used in place of IF ... ENDIF for simple conditional expressions and is especially useful
        /// in report and label expressions that conditionally specify field contents.
        /// The IIF() function also executes considerably faster than an equivalent IF ... ENDIF.</remarks>
        public static object Iif(object expL, object exp1, object exp2) 
        {
            bool flag = (bool)expL;
            return flag ? exp1 : exp2;
        }

        /// <summary>
        /// Determines whether or not an expression is blank.
        /// </summary>
        /// <param name="src">The value to check if its content is blank.</param>
        /// <returns>true if the value contains blank, else, false.</returns>
        /// <remarks>ISBLANK() returns true if the expression <paramref name="src"/> is blank, or false if the expression isn't blank.
        /// ISBLANK() differs from EMPTY(). For example, EMPTY() returns true if a character expression contains any combination of
        /// nulls, spaces, tabs, carriage returns or line feeds; ISBLANK() returns true if a character expression contains only
        /// the null string or spaces.
        /// </remarks>
        [SuppressMessage("Microsoft.Performance", "CA1800")]
        static public bool IsBlank(object src) 
        {
            if (src is string)
            {
                string ssrc = (string)src;
                if (ssrc.Length == 0) return true;
                foreach (char ch in ssrc)
                    if (ch != ' ')
                        return false;
                return true;
            }

            if (src is DateTime)
                return ((DateTime)src) == DateTime.MinValue;
            
            // 'IsBlank()' applies most for the content of fields, when they are in 'blank' state after 'append blank' 
            // is executed.
            return false;
        }

        /// <summary>
        /// Following is a helper function that is really doing the 'inlist'. Our evaluator is able to handle varargs for builtin
        /// functions if all possible prototypes are exhibed.
        /// </summary>
        /// <param name="src">The object to search in the list of arguments.</param>
        /// <param name="exp">The list into which to search 'src'</param>
        /// <returns>TRUE if <b>src</b> was found in <b>exp</b> list.</returns>
        [SuppressMessage("Microsoft.Performance", "CA1800")]
        static bool DoInList(object src, params object[] exp)
        {
            if (src is string)
            {
                string ssrc = (string)src;
                foreach (string dst in exp)
                    if (ssrc == dst)
                        return true;
                return false;
            }

            if (src is bool)
            {
                bool bsrc = (bool)src;
                foreach (bool bdst in exp)
                    if (bdst == bsrc)
                        return true;
                return false;
            }
            if (src is DateTime)
            {
                DateTime dsrc = (DateTime)src;
                foreach (DateTime ddst in exp)
                    if (dsrc == ddst)
                        return true;
                return false;
            }

            Decimal nsrc = FoxConvert.ToDecimal(src);
            foreach (object dst in exp)
            {
                Decimal ndst = FoxConvert.ToDecimal(dst);
                if (ndst == nsrc)
                    return true;
            }
            return false;
        }

        #region INLIST's overrides

        /// <summary>
        /// Determines whether or not an expression matches one in a series of expressions of the same data type.
        /// </summary>
        /// <remarks>INLIST() searches for an expression in a set of expressions.
        /// INLIST() returns true if it finds the expression in the set of expressions.
        /// If it doesn't find the expression in the set of expressions, INLIST() returns false.
        ///	All the expressions in the list must be of the same data type (character, numeric, logical or date).</remarks>
        /// <param name="src">The expression searched for in the set of expressions.</param>
        /// <param name="exp1">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp2">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp3">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp4">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp5">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp6">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp7">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp8">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp9">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp10">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp11">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp12">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp13">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp14">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp15">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp16">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp17">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp18">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp19">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp20">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp21">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp22">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp23">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp24">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <returns>true if <paramref name="src"/> is found in the set of expressions, else, false.</returns>
        static public bool InList(object src,
            object exp1, object exp2, object exp3, object exp4, object exp5, object exp6, object exp7, object exp8,
            object exp9, object exp10, object exp11, object exp12, object exp13, object exp14, object exp15, object exp16,
            object exp17, object exp18, object exp19, object exp20, object exp21, object exp22, object exp23, object exp24)
        {
            return DoInList(src,
                exp1, exp2, exp3, exp4, exp5, exp6, exp7, exp8,
                exp9, exp10, exp11, exp12, exp13, exp14, exp15, exp16,
                exp17, exp18, exp19, exp20, exp21, exp22, exp23, exp24);
        }

        /// <summary>
        /// Determines whether or not an expression matches one in a series of expressions of the same data type.
        /// </summary>
        /// <remarks>INLIST() searches for an expression in a set of expressions.
        /// INLIST() returns true if it finds the expression in the set of expressions.
        /// If it doesn't find the expression in the set of expressions, INLIST() returns false.
        ///	All the expressions in the list must be of the same data type (character, numeric, logical or date).</remarks>
        /// <param name="src">The expression searched for in the set of expressions.</param>
        /// <param name="exp1">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp2">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp3">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp4">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp5">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp6">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp7">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp8">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp9">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp10">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp11">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp12">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp13">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp14">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp15">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp16">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp17">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp18">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp19">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp20">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp21">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp22">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp23">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <returns>true if <paramref name="src"/> is found in the set of expressions, else, false.</returns>
        static public bool InList(object src,
            object exp1, object exp2, object exp3, object exp4, object exp5, object exp6, object exp7, object exp8,
            object exp9, object exp10, object exp11, object exp12, object exp13, object exp14, object exp15, object exp16,
            object exp17, object exp18, object exp19, object exp20, object exp21, object exp22, object exp23)
        {
            return DoInList(src,
                exp1, exp2, exp3, exp4, exp5, exp6, exp7, exp8,
                exp9, exp10, exp11, exp12, exp13, exp14, exp15, exp16,
                exp17, exp18, exp19, exp20, exp21, exp22, exp23);
        }

        /// <summary>
        /// Determines whether or not an expression matches one in a series of expressions of the same data type.
        /// </summary>
        /// <remarks>INLIST() searches for an expression in a set of expressions.
        /// INLIST() returns true if it finds the expression in the set of expressions.
        /// If it doesn't find the expression in the set of expressions, INLIST() returns false.
        ///	All the expressions in the list must be of the same data type (character, numeric, logical or date).</remarks>
        /// <param name="src">The expression searched for in the set of expressions.</param>
        /// <param name="exp1">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp2">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp3">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp4">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp5">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp6">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp7">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp8">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp9">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp10">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp11">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp12">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp13">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp14">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp15">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp16">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp17">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp18">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp19">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp20">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp21">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp22">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <returns>true if <paramref name="src"/> is found in the set of expressions, else, false.</returns>
        static public bool InList(object src,
            object exp1, object exp2, object exp3, object exp4, object exp5, object exp6, object exp7, object exp8,
            object exp9, object exp10, object exp11, object exp12, object exp13, object exp14, object exp15, object exp16,
            object exp17, object exp18, object exp19, object exp20, object exp21, object exp22)
        {
            return DoInList(src,
                exp1, exp2, exp3, exp4, exp5, exp6, exp7, exp8,
                exp9, exp10, exp11, exp12, exp13, exp14, exp15, exp16,
                exp17, exp18, exp19, exp20, exp21, exp22);
        }

        /// <summary>
        /// Determines whether or not an expression matches one in a series of expressions of the same data type.
        /// </summary>
        /// <remarks>INLIST() searches for an expression in a set of expressions.
        /// INLIST() returns true if it finds the expression in the set of expressions.
        /// If it doesn't find the expression in the set of expressions, INLIST() returns false.
        ///	All the expressions in the list must be of the same data type (character, numeric, logical or date).</remarks>
        /// <param name="src">The expression searched for in the set of expressions.</param>
        /// <param name="exp1">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp2">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp3">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp4">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp5">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp6">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp7">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp8">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp9">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp10">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp11">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp12">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp13">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp14">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp15">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp16">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp17">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp18">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp19">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp20">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp21">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <returns>true if <paramref name="src"/> is found in the set of expressions, else, false.</returns>
        static public bool InList(object src,
            object exp1, object exp2, object exp3, object exp4, object exp5, object exp6, object exp7, object exp8,
            object exp9, object exp10, object exp11, object exp12, object exp13, object exp14, object exp15, object exp16,
            object exp17, object exp18, object exp19, object exp20, object exp21)
        {
            return DoInList(src,
                exp1, exp2, exp3, exp4, exp5, exp6, exp7, exp8,
                exp9, exp10, exp11, exp12, exp13, exp14, exp15, exp16,
                exp17, exp18, exp19, exp20, exp21);
        }

        /// <summary>
        /// Determines whether or not an expression matches one in a series of expressions of the same data type.
        /// </summary>
        /// <remarks>INLIST() searches for an expression in a set of expressions.
        /// INLIST() returns true if it finds the expression in the set of expressions.
        /// If it doesn't find the expression in the set of expressions, INLIST() returns false.
        ///	All the expressions in the list must be of the same data type (character, numeric, logical or date).</remarks>
        /// <param name="src">The expression searched for in the set of expressions.</param>
        /// <param name="exp1">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp2">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp3">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp4">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp5">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp6">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp7">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp8">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp9">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp10">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp11">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp12">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp13">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp14">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp15">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp16">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp17">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp18">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp19">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp20">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <returns>true if <paramref name="src"/> is found in the set of expressions, else, false.</returns>
        static public bool InList(object src,
            object exp1, object exp2, object exp3, object exp4, object exp5, object exp6, object exp7, object exp8,
            object exp9, object exp10, object exp11, object exp12, object exp13, object exp14, object exp15, object exp16,
            object exp17, object exp18, object exp19, object exp20)
        {
            return DoInList(src,
                exp1, exp2, exp3, exp4, exp5, exp6, exp7, exp8,
                exp9, exp10, exp11, exp12, exp13, exp14, exp15, exp16,
                exp17, exp18, exp19, exp20);
        }

        /// <summary>
        /// Determines whether or not an expression matches one in a series of expressions of the same data type.
        /// </summary>
        /// <remarks>INLIST() searches for an expression in a set of expressions.
        /// INLIST() returns true if it finds the expression in the set of expressions.
        /// If it doesn't find the expression in the set of expressions, INLIST() returns false.
        ///	All the expressions in the list must be of the same data type (character, numeric, logical or date).</remarks>
        /// <param name="src">The expression searched for in the set of expressions.</param>
        /// <param name="exp1">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp2">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp3">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp4">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp5">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp6">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp7">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp8">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp9">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp10">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp11">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp12">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp13">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp14">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp15">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp16">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp17">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp18">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp19">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <returns>true if <paramref name="src"/> is found in the set of expressions, else, false.</returns>
        static public bool InList(object src,
            object exp1, object exp2, object exp3, object exp4, object exp5, object exp6, object exp7, object exp8,
            object exp9, object exp10, object exp11, object exp12, object exp13, object exp14, object exp15, object exp16,
            object exp17, object exp18, object exp19)
        {
            return DoInList(src,
                exp1, exp2, exp3, exp4, exp5, exp6, exp7, exp8,
                exp9, exp10, exp11, exp12, exp13, exp14, exp15, exp16,
                exp17, exp18, exp19);
        }

        /// <summary>
        /// Determines whether or not an expression matches one in a series of expressions of the same data type.
        /// </summary>
        /// <remarks>INLIST() searches for an expression in a set of expressions.
        /// INLIST() returns true if it finds the expression in the set of expressions.
        /// If it doesn't find the expression in the set of expressions, INLIST() returns false.
        ///	All the expressions in the list must be of the same data type (character, numeric, logical or date).</remarks>
        /// <param name="src">The expression searched for in the set of expressions.</param>
        /// <param name="exp1">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp2">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp3">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp4">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp5">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp6">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp7">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp8">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp9">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp10">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp11">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp12">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp13">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp14">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp15">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp16">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp17">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp18">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <returns>true if <paramref name="src"/> is found in the set of expressions, else, false.</returns>
        static public bool InList(object src,
            object exp1, object exp2, object exp3, object exp4, object exp5, object exp6, object exp7, object exp8,
            object exp9, object exp10, object exp11, object exp12, object exp13, object exp14, object exp15, object exp16,
            object exp17, object exp18)
        {
            return DoInList(src,
                exp1, exp2, exp3, exp4, exp5, exp6, exp7, exp8,
                exp9, exp10, exp11, exp12, exp13, exp14, exp15, exp16,
                exp17, exp18);
        }

        /// <summary>
        /// Determines whether or not an expression matches one in a series of expressions of the same data type.
        /// </summary>
        /// <remarks>INLIST() searches for an expression in a set of expressions.
        /// INLIST() returns true if it finds the expression in the set of expressions.
        /// If it doesn't find the expression in the set of expressions, INLIST() returns false.
        ///	All the expressions in the list must be of the same data type (character, numeric, logical or date).</remarks>
        /// <param name="src">The expression searched for in the set of expressions.</param>
        /// <param name="exp1">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp2">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp3">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp4">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp5">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp6">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp7">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp8">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp9">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp10">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp11">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp12">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp13">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp14">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp15">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp16">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp17">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <returns>true if <paramref name="src"/> is found in the set of expressions, else, false.</returns>
        static public bool InList(object src,
            object exp1, object exp2, object exp3, object exp4, object exp5, object exp6, object exp7, object exp8,
            object exp9, object exp10, object exp11, object exp12, object exp13, object exp14, object exp15, object exp16,
            object exp17)
        {
            return DoInList(src,
                exp1, exp2, exp3, exp4, exp5, exp6, exp7, exp8,
                exp9, exp10, exp11, exp12, exp13, exp14, exp15, exp16,
                exp17);
        }

        /// <summary>
        /// Determines whether or not an expression matches one in a series of expressions of the same data type.
        /// </summary>
        /// <remarks>INLIST() searches for an expression in a set of expressions.
        /// INLIST() returns true if it finds the expression in the set of expressions.
        /// If it doesn't find the expression in the set of expressions, INLIST() returns false.
        ///	All the expressions in the list must be of the same data type (character, numeric, logical or date).</remarks>
        /// <param name="src">The expression searched for in the set of expressions.</param>
        /// <param name="exp1">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp2">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp3">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp4">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp5">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp6">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp7">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp8">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp9">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp10">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp11">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp12">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp13">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp14">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp15">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp16">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <returns>true if <paramref name="src"/> is found in the set of expressions, else, false.</returns>
        static public bool InList(object src,
            object exp1, object exp2, object exp3, object exp4, object exp5, object exp6, object exp7, object exp8,
            object exp9, object exp10, object exp11, object exp12, object exp13, object exp14, object exp15, object exp16)
        {
            return DoInList(src,
                exp1, exp2, exp3, exp4, exp5, exp6, exp7, exp8,
                exp9, exp10, exp11, exp12, exp13, exp14, exp15, exp16);
        }

        /// <summary>
        /// Determines whether or not an expression matches one in a series of expressions of the same data type.
        /// </summary>
        /// <remarks>INLIST() searches for an expression in a set of expressions.
        /// INLIST() returns true if it finds the expression in the set of expressions.
        /// If it doesn't find the expression in the set of expressions, INLIST() returns false.
        ///	All the expressions in the list must be of the same data type (character, numeric, logical or date).</remarks>
        /// <param name="src">The expression searched for in the set of expressions.</param>
        /// <param name="exp1">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp2">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp3">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp4">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp5">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp6">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp7">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp8">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp9">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp10">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp11">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp12">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp13">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp14">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp15">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <returns>true if <paramref name="src"/> is found in the set of expressions, else, false.</returns>
        static public bool InList(object src,
            object exp1, object exp2, object exp3, object exp4, object exp5, object exp6, object exp7, object exp8,
            object exp9, object exp10, object exp11, object exp12, object exp13, object exp14, object exp15)
        {
            return DoInList(src,
                exp1, exp2, exp3, exp4, exp5, exp6, exp7, exp8,
                exp9, exp10, exp11, exp12, exp13, exp14, exp15);
        }

        /// <summary>
        /// Determines whether or not an expression matches one in a series of expressions of the same data type.
        /// </summary>
        /// <remarks>INLIST() searches for an expression in a set of expressions.
        /// INLIST() returns true if it finds the expression in the set of expressions.
        /// If it doesn't find the expression in the set of expressions, INLIST() returns false.
        ///	All the expressions in the list must be of the same data type (character, numeric, logical or date).</remarks>
        /// <param name="src">The expression searched for in the set of expressions.</param>
        /// <param name="exp1">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp2">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp3">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp4">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp5">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp6">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp7">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp8">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp9">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp10">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp11">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp12">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp13">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp14">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <returns>true if <paramref name="src"/> is found in the set of expressions, else, false.</returns>
        static public bool InList(object src,
            object exp1, object exp2, object exp3, object exp4, object exp5, object exp6, object exp7, object exp8,
            object exp9, object exp10, object exp11, object exp12, object exp13, object exp14)
        {
            return DoInList(src,
                exp1, exp2, exp3, exp4, exp5, exp6, exp7, exp8,
                exp9, exp10, exp11, exp12, exp13, exp14);
        }

        /// <summary>
        /// Determines whether or not an expression matches one in a series of expressions of the same data type.
        /// </summary>
        /// <remarks>INLIST() searches for an expression in a set of expressions.
        /// INLIST() returns true if it finds the expression in the set of expressions.
        /// If it doesn't find the expression in the set of expressions, INLIST() returns false.
        ///	All the expressions in the list must be of the same data type (character, numeric, logical or date).</remarks>
        /// <param name="src">The expression searched for in the set of expressions.</param>
        /// <param name="exp1">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp2">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp3">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp4">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp5">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp6">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp7">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp8">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp9">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp10">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp11">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp12">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp13">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <returns>true if <paramref name="src"/> is found in the set of expressions, else, false.</returns>
        static public bool InList(object src,
            object exp1, object exp2, object exp3, object exp4, object exp5, object exp6, object exp7, object exp8,
            object exp9, object exp10, object exp11, object exp12, object exp13)
        {
            return DoInList(src,
                exp1, exp2, exp3, exp4, exp5, exp6, exp7, exp8,
                exp9, exp10, exp11, exp12, exp13);
        }

        /// <summary>
        /// Determines whether or not an expression matches one in a series of expressions of the same data type.
        /// </summary>
        /// <remarks>INLIST() searches for an expression in a set of expressions.
        /// INLIST() returns true if it finds the expression in the set of expressions.
        /// If it doesn't find the expression in the set of expressions, INLIST() returns false.
        ///	All the expressions in the list must be of the same data type (character, numeric, logical or date).</remarks>
        /// <param name="src">The expression searched for in the set of expressions.</param>
        /// <param name="exp1">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp2">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp3">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp4">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp5">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp6">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp7">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp8">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp9">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp10">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp11">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp12">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <returns>true if <paramref name="src"/> is found in the set of expressions, else, false.</returns>
        static public bool InList(object src,
            object exp1, object exp2, object exp3, object exp4, object exp5, object exp6, object exp7, object exp8,
            object exp9, object exp10, object exp11, object exp12)
        {
            return DoInList(src,
                exp1, exp2, exp3, exp4, exp5, exp6, exp7, exp8,
                exp9, exp10, exp11, exp12);
        }

        /// <summary>
        /// Determines whether or not an expression matches one in a series of expressions of the same data type.
        /// </summary>
        /// <remarks>INLIST() searches for an expression in a set of expressions.
        /// INLIST() returns true if it finds the expression in the set of expressions.
        /// If it doesn't find the expression in the set of expressions, INLIST() returns false.
        ///	All the expressions in the list must be of the same data type (character, numeric, logical or date).</remarks>
        /// <param name="src">The expression searched for in the set of expressions.</param>
        /// <param name="exp1">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp2">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp3">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp4">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp5">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp6">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp7">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp8">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp9">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp10">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp11">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <returns>true if <paramref name="src"/> is found in the set of expressions, else, false.</returns>
        static public bool InList(object src,
            object exp1, object exp2, object exp3, object exp4, object exp5, object exp6, object exp7, object exp8,
            object exp9, object exp10, object exp11)
        {
            return DoInList(src,
                exp1, exp2, exp3, exp4, exp5, exp6, exp7, exp8,
                exp9, exp10, exp11);
        }

        /// <summary>
        /// Determines whether or not an expression matches one in a series of expressions of the same data type.
        /// </summary>
        /// <remarks>INLIST() searches for an expression in a set of expressions.
        /// INLIST() returns true if it finds the expression in the set of expressions.
        /// If it doesn't find the expression in the set of expressions, INLIST() returns false.
        ///	All the expressions in the list must be of the same data type (character, numeric, logical or date).</remarks>
        /// <param name="src">The expression searched for in the set of expressions.</param>
        /// <param name="exp1">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp2">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp3">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp4">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp5">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp6">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp7">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp8">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp9">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp10">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <returns>true if <paramref name="src"/> is found in the set of expressions, else, false.</returns>
        static public bool InList(object src,
            object exp1, object exp2, object exp3, object exp4, object exp5, object exp6, object exp7, object exp8,
            object exp9, object exp10)
        {
            return DoInList(src,
                exp1, exp2, exp3, exp4, exp5, exp6, exp7, exp8,
                exp9, exp10);
        }

        /// <summary>
        /// Determines whether or not an expression matches one in a series of expressions of the same data type.
        /// </summary>
        /// <remarks>INLIST() searches for an expression in a set of expressions.
        /// INLIST() returns true if it finds the expression in the set of expressions.
        /// If it doesn't find the expression in the set of expressions, INLIST() returns false.
        ///	All the expressions in the list must be of the same data type (character, numeric, logical or date).</remarks>
        /// <param name="src">The expression searched for in the set of expressions.</param>
        /// <param name="exp1">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp2">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp3">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp4">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp5">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp6">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp7">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp8">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp9">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <returns>true if <paramref name="src"/> is found in the set of expressions, else, false.</returns>
        static public bool InList(object src,
            object exp1, object exp2, object exp3, object exp4, object exp5, object exp6, object exp7, object exp8,
            object exp9)
        {
            return DoInList(src,
                exp1, exp2, exp3, exp4, exp5, exp6, exp7, exp8,
                exp9);
        }

        /// <summary>
        /// Determines whether or not an expression matches one in a series of expressions of the same data type.
        /// </summary>
        /// <remarks>INLIST() searches for an expression in a set of expressions.
        /// INLIST() returns true if it finds the expression in the set of expressions.
        /// If it doesn't find the expression in the set of expressions, INLIST() returns false.
        ///	All the expressions in the list must be of the same data type (character, numeric, logical or date).</remarks>
        /// <param name="src">The expression searched for in the set of expressions.</param>
        /// <param name="exp1">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp2">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp3">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp4">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp5">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp6">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp7">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp8">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <returns>true if <paramref name="src"/> is found in the set of expressions, else, false.</returns>
        static public bool InList(object src,
            object exp1, object exp2, object exp3, object exp4, object exp5, object exp6, object exp7, object exp8)
        {
            return DoInList(src,
                exp1, exp2, exp3, exp4, exp5, exp6, exp7, exp8);
        }

        /// <summary>
        /// Determines whether or not an expression matches one in a series of expressions of the same data type.
        /// </summary>
        /// <remarks>INLIST() searches for an expression in a set of expressions.
        /// INLIST() returns true if it finds the expression in the set of expressions.
        /// If it doesn't find the expression in the set of expressions, INLIST() returns false.
        ///	All the expressions in the list must be of the same data type (character, numeric, logical or date).</remarks>
        /// <param name="src">The expression searched for in the set of expressions.</param>
        /// <param name="exp1">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp2">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp3">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp4">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp5">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp6">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp7">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <returns>true if <paramref name="src"/> is found in the set of expressions, else, false.</returns>
        static public bool InList(object src,
            object exp1, object exp2, object exp3, object exp4, object exp5, object exp6, object exp7)
        {
            return DoInList(src,
                exp1, exp2, exp3, exp4, exp5, exp6, exp7);
        }

        /// <summary>
        /// Determines whether or not an expression matches one in a series of expressions of the same data type.
        /// </summary>
        /// <remarks>INLIST() searches for an expression in a set of expressions.
        /// INLIST() returns true if it finds the expression in the set of expressions.
        /// If it doesn't find the expression in the set of expressions, INLIST() returns false.
        ///	All the expressions in the list must be of the same data type (character, numeric, logical or date).</remarks>
        /// <param name="src">The expression searched for in the set of expressions.</param>
        /// <param name="exp1">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp2">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp3">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp4">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp5">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp6">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <returns>true if <paramref name="src"/> is found in the set of expressions, else, false.</returns>
        static public bool InList(object src,
            object exp1, object exp2, object exp3, object exp4, object exp5, object exp6)
        {
            return DoInList(src,
                exp1, exp2, exp3, exp4, exp5, exp6);
        }

        /// <summary>
        /// Determines whether or not an expression matches one in a series of expressions of the same data type.
        /// </summary>
        /// <remarks>INLIST() searches for an expression in a set of expressions.
        /// INLIST() returns true if it finds the expression in the set of expressions.
        /// If it doesn't find the expression in the set of expressions, INLIST() returns false.
        ///	All the expressions in the list must be of the same data type (character, numeric, logical or date).</remarks>
        /// <param name="src">The expression searched for in the set of expressions.</param>
        /// <param name="exp1">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp2">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp3">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp4">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp5">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <returns>true if <paramref name="src"/> is found in the set of expressions, else, false.</returns>
        static public bool InList(object src,
            object exp1, object exp2, object exp3, object exp4, object exp5)
        {
            return DoInList(src,
                exp1, exp2, exp3, exp4, exp5);
        }

        /// <summary>
        /// Determines whether or not an expression matches one in a series of expressions of the same data type.
        /// </summary>
        /// <remarks>INLIST() searches for an expression in a set of expressions.
        /// INLIST() returns true if it finds the expression in the set of expressions.
        /// If it doesn't find the expression in the set of expressions, INLIST() returns false.
        ///	All the expressions in the list must be of the same data type (character, numeric, logical or date).</remarks>
        /// <param name="src">The expression searched for in the set of expressions.</param>
        /// <param name="exp1">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp2">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp3">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp4">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <returns>true if <paramref name="src"/> is found in the set of expressions, else, false.</returns>
        static public bool InList(object src,
            object exp1, object exp2, object exp3, object exp4)
        {
            return DoInList(src,
                exp1, exp2, exp3, exp4);
        }

        /// <summary>
        /// Determines whether or not an expression matches one in a series of expressions of the same data type.
        /// </summary>
        /// <remarks>INLIST() searches for an expression in a set of expressions.
        /// INLIST() returns true if it finds the expression in the set of expressions.
        /// If it doesn't find the expression in the set of expressions, INLIST() returns false.
        ///	All the expressions in the list must be of the same data type (character, numeric, logical or date).</remarks>
        /// <param name="src">The expression searched for in the set of expressions.</param>
        /// <param name="exp1">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp2">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp3">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <returns>true if <paramref name="src"/> is found in the set of expressions, else, false.</returns>
        static public bool InList(object src,
            object exp1, object exp2, object exp3)
        {
            return DoInList(src,
                exp1, exp2, exp3);
        }

        /// <summary>
        /// Determines whether or not an expression matches one in a series of expressions of the same data type.
        /// </summary>
        /// <remarks>INLIST() searches for an expression in a set of expressions.
        /// INLIST() returns true if it finds the expression in the set of expressions.
        /// If it doesn't find the expression in the set of expressions, INLIST() returns false.
        ///	All the expressions in the list must be of the same data type (character, numeric, logical or date).</remarks>
        /// <param name="src">The expression searched for in the set of expressions.</param>
        /// <param name="exp1">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <param name="exp2">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <returns>true if <paramref name="src"/> is found in the set of expressions, else, false.</returns>
        static public bool InList(object src,
            object exp1, object exp2)
        {
            return DoInList(src,
                exp1, exp2);
        }

        /// <summary>
        /// Determines whether or not an expression matches one in a series of expressions of the same data type.
        /// </summary>
        /// <remarks>INLIST() searches for an expression in a set of expressions.
        /// INLIST() returns true if it finds the expression in the set of expressions.
        /// If it doesn't find the expression in the set of expressions, INLIST() returns false.
        ///	All the expressions in the list must be of the same data type (character, numeric, logical or date).</remarks>
        /// <param name="src">The expression searched for in the set of expressions.</param>
        /// <param name="exp1">One of the expressions to compare with <paramref name="src"/> to see if it is the same.</param>
        /// <returns>true if <paramref name="src"/> is found in the set of expressions, else, false.</returns>
        static public bool InList(object src,
            object exp1)
        {
            return DoInList(src,
                exp1);
        }
        #endregion

        /// <summary>
        /// Following is a helper function that is really doing the 'MAX'. Our evaluator is able to handle varargs for builtin
        /// functions if all possible prototypes are exhibed.
        /// </summary>
        /// <param name="src">The first object of the list.</param>
        /// <param name="exp">The second and further objects of the list</param>
        /// <returns>The HIGHER object in all the list</returns>
        [SuppressMessage("Microsoft.Performance", "CA1800")]
        static object DoMax(object src, params object[] exp)
        {
            if (src is string)
            {
                string ssrc = (string)src;
                foreach (string dst in exp)
                    if (ssrc.FoxCompare(dst, false) < 0)
                        ssrc = dst;
                return ssrc;
            }

            if (src is bool)
            {
                bool bsrc = (bool)src;
                if (bsrc) return true;
                foreach (bool bdst in exp)
                    if (bdst)
                        return true;
                return false;
            }
            if (src is DateTime)
            {
                DateTime dsrc = (DateTime)src;
                foreach (DateTime ddst in exp)
                    if (dsrc.CompareTo(ddst) < 0)
                        return dsrc = ddst;
                return dsrc;
            }

            Decimal nsrc = FoxConvert.ToDecimal(src);
            foreach (object dst in exp)
            {
                Decimal ndst = FoxConvert.ToDecimal(dst);
                if (nsrc < ndst)
                    nsrc = ndst;
            }
            return nsrc;
        }

        #region MAX's overrides

        /// <summary>
        /// Returns the expression with the highest ASCII or numeric value or the latest date from a list of character, numeric or date expressions.
        /// </summary>
        /// <remarks>
        /// MAX() (maximum) evaluates a set of expressions and returns the expression with the largest value.  
        /// When determining the maximum date value from a set of dates, MAX() returns the latest date.
        /// MAX() returns the character expression with the maximum ASCII value from a set of character expressions. 
	    /// All the expressions must be of the same type (character, numeric or date).</remarks>
        /// <param name="src">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp1">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp2">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp3">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp4">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp5">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp6">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp7">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp8">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp9">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp10">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp11">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp12">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp13">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp14">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp15">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp16">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp17">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp18">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp19">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp20">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp21">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp22">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp23">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp24">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <returns>The hightest string, number or date of the list of passed expressions</returns>
        static public object Max(object src,
            object exp1, object exp2, object exp3, object exp4, object exp5, object exp6, object exp7, object exp8,
            object exp9, object exp10, object exp11, object exp12, object exp13, object exp14, object exp15, object exp16,
            object exp17, object exp18, object exp19, object exp20, object exp21, object exp22, object exp23, object exp24)
        {
            return DoMax(src,
                exp1, exp2, exp3, exp4, exp5, exp6, exp7, exp8,
                exp9, exp10, exp11, exp12, exp13, exp14, exp15, exp16,
                exp17, exp18, exp19, exp20, exp21, exp22, exp23, exp24);
        }

        /// <summary>
        /// Returns the expression with the highest ASCII or numeric value or the latest date from a list of character, numeric or date expressions.
        /// </summary>
        /// <remarks>
        /// MAX() (maximum) evaluates a set of expressions and returns the expression with the largest value.  
        /// When determining the maximum date value from a set of dates, MAX() returns the latest date.
        /// MAX() returns the character expression with the maximum ASCII value from a set of character expressions. 
        /// All the expressions must be of the same type (character, numeric or date).</remarks>
        /// <param name="src">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp1">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp2">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp3">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp4">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp5">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp6">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp7">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp8">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp9">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp10">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp11">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp12">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp13">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp14">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp15">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp16">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp17">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp18">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp19">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp20">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp21">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp22">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp23">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <returns>The hightest string, number or date of the list of passed expressions</returns>
        static public object Max(object src,
            object exp1, object exp2, object exp3, object exp4, object exp5, object exp6, object exp7, object exp8,
            object exp9, object exp10, object exp11, object exp12, object exp13, object exp14, object exp15, object exp16,
            object exp17, object exp18, object exp19, object exp20, object exp21, object exp22, object exp23)
        {
            return DoMax(src,
                exp1, exp2, exp3, exp4, exp5, exp6, exp7, exp8,
                exp9, exp10, exp11, exp12, exp13, exp14, exp15, exp16,
                exp17, exp18, exp19, exp20, exp21, exp22, exp23);
        }

        /// <summary>
        /// Returns the expression with the highest ASCII or numeric value or the latest date from a list of character, numeric or date expressions.
        /// </summary>
        /// <remarks>
        /// MAX() (maximum) evaluates a set of expressions and returns the expression with the largest value.  
        /// When determining the maximum date value from a set of dates, MAX() returns the latest date.
        /// MAX() returns the character expression with the maximum ASCII value from a set of character expressions. 
        /// All the expressions must be of the same type (character, numeric or date).</remarks>
        /// <param name="src">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp1">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp2">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp3">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp4">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp5">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp6">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp7">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp8">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp9">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp10">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp11">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp12">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp13">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp14">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp15">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp16">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp17">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp18">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp19">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp20">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp21">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp22">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <returns>The hightest string, number or date of the list of passed expressions</returns>
        static public object Max(object src,
            object exp1, object exp2, object exp3, object exp4, object exp5, object exp6, object exp7, object exp8,
            object exp9, object exp10, object exp11, object exp12, object exp13, object exp14, object exp15, object exp16,
            object exp17, object exp18, object exp19, object exp20, object exp21, object exp22)
        {
            return DoMax(src,
                exp1, exp2, exp3, exp4, exp5, exp6, exp7, exp8,
                exp9, exp10, exp11, exp12, exp13, exp14, exp15, exp16,
                exp17, exp18, exp19, exp20, exp21, exp22);
        }

        /// <summary>
        /// Returns the expression with the highest ASCII or numeric value or the latest date from a list of character, numeric or date expressions.
        /// </summary>
        /// <remarks>
        /// MAX() (maximum) evaluates a set of expressions and returns the expression with the largest value.  
        /// When determining the maximum date value from a set of dates, MAX() returns the latest date.
        /// MAX() returns the character expression with the maximum ASCII value from a set of character expressions. 
        /// All the expressions must be of the same type (character, numeric or date).</remarks>
        /// <param name="src">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp1">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp2">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp3">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp4">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp5">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp6">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp7">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp8">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp9">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp10">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp11">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp12">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp13">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp14">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp15">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp16">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp17">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp18">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp19">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp20">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp21">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <returns>The hightest string, number or date of the list of passed expressions</returns>
        static public object Max(object src,
            object exp1, object exp2, object exp3, object exp4, object exp5, object exp6, object exp7, object exp8,
            object exp9, object exp10, object exp11, object exp12, object exp13, object exp14, object exp15, object exp16,
            object exp17, object exp18, object exp19, object exp20, object exp21)
        {
            return DoMax(src,
                exp1, exp2, exp3, exp4, exp5, exp6, exp7, exp8,
                exp9, exp10, exp11, exp12, exp13, exp14, exp15, exp16,
                exp17, exp18, exp19, exp20, exp21);
        }

        /// <summary>
        /// Returns the expression with the highest ASCII or numeric value or the latest date from a list of character, numeric or date expressions.
        /// </summary>
        /// <remarks>
        /// MAX() (maximum) evaluates a set of expressions and returns the expression with the largest value.  
        /// When determining the maximum date value from a set of dates, MAX() returns the latest date.
        /// MAX() returns the character expression with the maximum ASCII value from a set of character expressions. 
        /// All the expressions must be of the same type (character, numeric or date).</remarks>
        /// <param name="src">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp1">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp2">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp3">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp4">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp5">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp6">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp7">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp8">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp9">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp10">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp11">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp12">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp13">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp14">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp15">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp16">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp17">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp18">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp19">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp20">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <returns>The hightest string, number or date of the list of passed expressions</returns>
        static public object Max(object src,
            object exp1, object exp2, object exp3, object exp4, object exp5, object exp6, object exp7, object exp8,
            object exp9, object exp10, object exp11, object exp12, object exp13, object exp14, object exp15, object exp16,
            object exp17, object exp18, object exp19, object exp20)
        {
            return DoMax(src,
                exp1, exp2, exp3, exp4, exp5, exp6, exp7, exp8,
                exp9, exp10, exp11, exp12, exp13, exp14, exp15, exp16,
                exp17, exp18, exp19, exp20);
        }

        /// <summary>
        /// Returns the expression with the highest ASCII or numeric value or the latest date from a list of character, numeric or date expressions.
        /// </summary>
        /// <remarks>
        /// MAX() (maximum) evaluates a set of expressions and returns the expression with the largest value.  
        /// When determining the maximum date value from a set of dates, MAX() returns the latest date.
        /// MAX() returns the character expression with the maximum ASCII value from a set of character expressions. 
        /// All the expressions must be of the same type (character, numeric or date).</remarks>
        /// <param name="src">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp1">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp2">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp3">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp4">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp5">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp6">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp7">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp8">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp9">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp10">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp11">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp12">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp13">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp14">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp15">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp16">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp17">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp18">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp19">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <returns>The hightest string, number or date of the list of passed expressions</returns>
        static public object Max(object src,
            object exp1, object exp2, object exp3, object exp4, object exp5, object exp6, object exp7, object exp8,
            object exp9, object exp10, object exp11, object exp12, object exp13, object exp14, object exp15, object exp16,
            object exp17, object exp18, object exp19)
        {
            return DoMax(src,
                exp1, exp2, exp3, exp4, exp5, exp6, exp7, exp8,
                exp9, exp10, exp11, exp12, exp13, exp14, exp15, exp16,
                exp17, exp18, exp19);
        }

        /// <summary>
        /// Returns the expression with the highest ASCII or numeric value or the latest date from a list of character, numeric or date expressions.
        /// </summary>
        /// <remarks>
        /// MAX() (maximum) evaluates a set of expressions and returns the expression with the largest value.  
        /// When determining the maximum date value from a set of dates, MAX() returns the latest date.
        /// MAX() returns the character expression with the maximum ASCII value from a set of character expressions. 
        /// All the expressions must be of the same type (character, numeric or date).</remarks>
        /// <param name="src">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp1">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp2">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp3">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp4">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp5">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp6">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp7">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp8">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp9">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp10">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp11">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp12">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp13">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp14">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp15">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp16">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp17">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp18">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <returns>The hightest string, number or date of the list of passed expressions</returns>
        static public object Max(object src,
            object exp1, object exp2, object exp3, object exp4, object exp5, object exp6, object exp7, object exp8,
            object exp9, object exp10, object exp11, object exp12, object exp13, object exp14, object exp15, object exp16,
            object exp17, object exp18)
        {
            return DoMax(src,
                exp1, exp2, exp3, exp4, exp5, exp6, exp7, exp8,
                exp9, exp10, exp11, exp12, exp13, exp14, exp15, exp16,
                exp17, exp18);
        }

        /// <summary>
        /// Returns the expression with the highest ASCII or numeric value or the latest date from a list of character, numeric or date expressions.
        /// </summary>
        /// <remarks>
        /// MAX() (maximum) evaluates a set of expressions and returns the expression with the largest value.  
        /// When determining the maximum date value from a set of dates, MAX() returns the latest date.
        /// MAX() returns the character expression with the maximum ASCII value from a set of character expressions. 
        /// All the expressions must be of the same type (character, numeric or date).</remarks>
        /// <param name="src">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp1">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp2">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp3">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp4">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp5">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp6">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp7">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp8">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp9">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp10">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp11">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp12">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp13">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp14">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp15">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp16">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp17">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <returns>The hightest string, number or date of the list of passed expressions</returns>
        static public object Max(object src,
            object exp1, object exp2, object exp3, object exp4, object exp5, object exp6, object exp7, object exp8,
            object exp9, object exp10, object exp11, object exp12, object exp13, object exp14, object exp15, object exp16,
            object exp17)
        {
            return DoMax(src,
                exp1, exp2, exp3, exp4, exp5, exp6, exp7, exp8,
                exp9, exp10, exp11, exp12, exp13, exp14, exp15, exp16,
                exp17);
        }

        /// <summary>
        /// Returns the expression with the highest ASCII or numeric value or the latest date from a list of character, numeric or date expressions.
        /// </summary>
        /// <remarks>
        /// MAX() (maximum) evaluates a set of expressions and returns the expression with the largest value.  
        /// When determining the maximum date value from a set of dates, MAX() returns the latest date.
        /// MAX() returns the character expression with the maximum ASCII value from a set of character expressions. 
        /// All the expressions must be of the same type (character, numeric or date).</remarks>
        /// <param name="src">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp1">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp2">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp3">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp4">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp5">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp6">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp7">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp8">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp9">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp10">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp11">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp12">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp13">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp14">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp15">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp16">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <returns>The hightest string, number or date of the list of passed expressions</returns>
        static public object Max(object src,
            object exp1, object exp2, object exp3, object exp4, object exp5, object exp6, object exp7, object exp8,
            object exp9, object exp10, object exp11, object exp12, object exp13, object exp14, object exp15, object exp16)
        {
            return DoMax(src,
                exp1, exp2, exp3, exp4, exp5, exp6, exp7, exp8,
                exp9, exp10, exp11, exp12, exp13, exp14, exp15, exp16);
        }

        /// <summary>
        /// Returns the expression with the highest ASCII or numeric value or the latest date from a list of character, numeric or date expressions.
        /// </summary>
        /// <remarks>
        /// MAX() (maximum) evaluates a set of expressions and returns the expression with the largest value.  
        /// When determining the maximum date value from a set of dates, MAX() returns the latest date.
        /// MAX() returns the character expression with the maximum ASCII value from a set of character expressions. 
        /// All the expressions must be of the same type (character, numeric or date).</remarks>
        /// <param name="src">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp1">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp2">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp3">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp4">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp5">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp6">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp7">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp8">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp9">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp10">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp11">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp12">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp13">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp14">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp15">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <returns>The hightest string, number or date of the list of passed expressions</returns>
        static public object Max(object src,
            object exp1, object exp2, object exp3, object exp4, object exp5, object exp6, object exp7, object exp8,
            object exp9, object exp10, object exp11, object exp12, object exp13, object exp14, object exp15)
        {
            return DoMax(src,
                exp1, exp2, exp3, exp4, exp5, exp6, exp7, exp8,
                exp9, exp10, exp11, exp12, exp13, exp14, exp15);
        }

        /// <summary>
        /// Returns the expression with the highest ASCII or numeric value or the latest date from a list of character, numeric or date expressions.
        /// </summary>
        /// <remarks>
        /// MAX() (maximum) evaluates a set of expressions and returns the expression with the largest value.  
        /// When determining the maximum date value from a set of dates, MAX() returns the latest date.
        /// MAX() returns the character expression with the maximum ASCII value from a set of character expressions. 
        /// All the expressions must be of the same type (character, numeric or date).</remarks>
        /// <param name="src">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp1">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp2">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp3">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp4">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp5">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp6">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp7">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp8">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp9">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp10">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp11">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp12">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp13">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp14">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <returns>The hightest string, number or date of the list of passed expressions</returns>
        static public object Max(object src,
            object exp1, object exp2, object exp3, object exp4, object exp5, object exp6, object exp7, object exp8,
            object exp9, object exp10, object exp11, object exp12, object exp13, object exp14)
        {
            return DoMax(src,
                exp1, exp2, exp3, exp4, exp5, exp6, exp7, exp8,
                exp9, exp10, exp11, exp12, exp13, exp14);
        }

        /// <summary>
        /// Returns the expression with the highest ASCII or numeric value or the latest date from a list of character, numeric or date expressions.
        /// </summary>
        /// <remarks>
        /// MAX() (maximum) evaluates a set of expressions and returns the expression with the largest value.  
        /// When determining the maximum date value from a set of dates, MAX() returns the latest date.
        /// MAX() returns the character expression with the maximum ASCII value from a set of character expressions. 
        /// All the expressions must be of the same type (character, numeric or date).</remarks>
        /// <param name="src">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp1">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp2">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp3">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp4">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp5">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp6">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp7">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp8">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp9">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp10">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp11">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp12">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp13">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <returns>The hightest string, number or date of the list of passed expressions</returns>
        static public object Max(object src,
            object exp1, object exp2, object exp3, object exp4, object exp5, object exp6, object exp7, object exp8,
            object exp9, object exp10, object exp11, object exp12, object exp13)
        {
            return DoMax(src,
                exp1, exp2, exp3, exp4, exp5, exp6, exp7, exp8,
                exp9, exp10, exp11, exp12, exp13);
        }

        /// <summary>
        /// Returns the expression with the highest ASCII or numeric value or the latest date from a list of character, numeric or date expressions.
        /// </summary>
        /// <remarks>
        /// MAX() (maximum) evaluates a set of expressions and returns the expression with the largest value.  
        /// When determining the maximum date value from a set of dates, MAX() returns the latest date.
        /// MAX() returns the character expression with the maximum ASCII value from a set of character expressions. 
        /// All the expressions must be of the same type (character, numeric or date).</remarks>
        /// <param name="src">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp1">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp2">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp3">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp4">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp5">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp6">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp7">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp8">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp9">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp10">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp11">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp12">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <returns>The hightest string, number or date of the list of passed expressions</returns>
        static public object Max(object src,
            object exp1, object exp2, object exp3, object exp4, object exp5, object exp6, object exp7, object exp8,
            object exp9, object exp10, object exp11, object exp12)
        {
            return DoMax(src,
                exp1, exp2, exp3, exp4, exp5, exp6, exp7, exp8,
                exp9, exp10, exp11, exp12);
        }

        /// <summary>
        /// Returns the expression with the highest ASCII or numeric value or the latest date from a list of character, numeric or date expressions.
        /// </summary>
        /// <remarks>
        /// MAX() (maximum) evaluates a set of expressions and returns the expression with the largest value.  
        /// When determining the maximum date value from a set of dates, MAX() returns the latest date.
        /// MAX() returns the character expression with the maximum ASCII value from a set of character expressions. 
        /// All the expressions must be of the same type (character, numeric or date).</remarks>
        /// <param name="src">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp1">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp2">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp3">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp4">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp5">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp6">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp7">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp8">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp9">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp10">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp11">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <returns>The hightest string, number or date of the list of passed expressions</returns>
        static public object Max(object src,
            object exp1, object exp2, object exp3, object exp4, object exp5, object exp6, object exp7, object exp8,
            object exp9, object exp10, object exp11)
        {
            return DoMax(src,
                exp1, exp2, exp3, exp4, exp5, exp6, exp7, exp8,
                exp9, exp10, exp11);
        }

        /// <summary>
        /// Returns the expression with the highest ASCII or numeric value or the latest date from a list of character, numeric or date expressions.
        /// </summary>
        /// <remarks>
        /// MAX() (maximum) evaluates a set of expressions and returns the expression with the largest value.  
        /// When determining the maximum date value from a set of dates, MAX() returns the latest date.
        /// MAX() returns the character expression with the maximum ASCII value from a set of character expressions. 
        /// All the expressions must be of the same type (character, numeric or date).</remarks>
        /// <param name="src">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp1">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp2">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp3">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp4">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp5">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp6">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp7">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp8">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp9">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp10">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <returns>The hightest string, number or date of the list of passed expressions</returns>
        static public object Max(object src,
            object exp1, object exp2, object exp3, object exp4, object exp5, object exp6, object exp7, object exp8,
            object exp9, object exp10)
        {
            return DoMax(src,
                exp1, exp2, exp3, exp4, exp5, exp6, exp7, exp8,
                exp9, exp10);
        }

        /// <summary>
        /// Returns the expression with the highest ASCII or numeric value or the latest date from a list of character, numeric or date expressions.
        /// </summary>
        /// <remarks>
        /// MAX() (maximum) evaluates a set of expressions and returns the expression with the largest value.  
        /// When determining the maximum date value from a set of dates, MAX() returns the latest date.
        /// MAX() returns the character expression with the maximum ASCII value from a set of character expressions. 
        /// All the expressions must be of the same type (character, numeric or date).</remarks>
        /// <param name="src">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp1">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp2">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp3">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp4">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp5">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp6">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp7">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp8">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp9">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <returns>The hightest string, number or date of the list of passed expressions</returns>
        static public object Max(object src,
            object exp1, object exp2, object exp3, object exp4, object exp5, object exp6, object exp7, object exp8,
            object exp9)
        {
            return DoMax(src,
                exp1, exp2, exp3, exp4, exp5, exp6, exp7, exp8,
                exp9);
        }

        /// <summary>
        /// Returns the expression with the highest ASCII or numeric value or the latest date from a list of character, numeric or date expressions.
        /// </summary>
        /// <remarks>
        /// MAX() (maximum) evaluates a set of expressions and returns the expression with the largest value.  
        /// When determining the maximum date value from a set of dates, MAX() returns the latest date.
        /// MAX() returns the character expression with the maximum ASCII value from a set of character expressions. 
        /// All the expressions must be of the same type (character, numeric or date).</remarks>
        /// <param name="src">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp1">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp2">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp3">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp4">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp5">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp6">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp7">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp8">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <returns>The hightest string, number or date of the list of passed expressions</returns>
        static public object Max(object src,
            object exp1, object exp2, object exp3, object exp4, object exp5, object exp6, object exp7, object exp8)
        {
            return DoMax(src,
                exp1, exp2, exp3, exp4, exp5, exp6, exp7, exp8);
        }

        /// <summary>
        /// Returns the expression with the highest ASCII or numeric value or the latest date from a list of character, numeric or date expressions.
        /// </summary>
        /// <remarks>
        /// MAX() (maximum) evaluates a set of expressions and returns the expression with the largest value.  
        /// When determining the maximum date value from a set of dates, MAX() returns the latest date.
        /// MAX() returns the character expression with the maximum ASCII value from a set of character expressions. 
        /// All the expressions must be of the same type (character, numeric or date).</remarks>
        /// <param name="src">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp1">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp2">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp3">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp4">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp5">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp6">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp7">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <returns>The hightest string, number or date of the list of passed expressions</returns>
        static public object Max(object src,
            object exp1, object exp2, object exp3, object exp4, object exp5, object exp6, object exp7)
        {
            return DoMax(src,
                exp1, exp2, exp3, exp4, exp5, exp6, exp7);
        }

        /// <summary>
        /// Returns the expression with the highest ASCII or numeric value or the latest date from a list of character, numeric or date expressions.
        /// </summary>
        /// <remarks>
        /// MAX() (maximum) evaluates a set of expressions and returns the expression with the largest value.  
        /// When determining the maximum date value from a set of dates, MAX() returns the latest date.
        /// MAX() returns the character expression with the maximum ASCII value from a set of character expressions. 
        /// All the expressions must be of the same type (character, numeric or date).</remarks>
        /// <param name="src">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp1">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp2">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp3">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp4">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp5">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp6">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <returns>The hightest string, number or date of the list of passed expressions</returns>
        static public object Max(object src,
            object exp1, object exp2, object exp3, object exp4, object exp5, object exp6)
        {
            return DoMax(src,
                exp1, exp2, exp3, exp4, exp5, exp6);
        }

        /// <summary>
        /// Returns the expression with the highest ASCII or numeric value or the latest date from a list of character, numeric or date expressions.
        /// </summary>
        /// <remarks>
        /// MAX() (maximum) evaluates a set of expressions and returns the expression with the largest value.  
        /// When determining the maximum date value from a set of dates, MAX() returns the latest date.
        /// MAX() returns the character expression with the maximum ASCII value from a set of character expressions. 
        /// All the expressions must be of the same type (character, numeric or date).</remarks>
        /// <param name="src">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp1">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp2">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp3">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp4">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp5">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <returns>The hightest string, number or date of the list of passed expressions</returns>
        static public object Max(object src,
            object exp1, object exp2, object exp3, object exp4, object exp5)
        {
            return DoMax(src,
                exp1, exp2, exp3, exp4, exp5);
        }

        /// <summary>
        /// Returns the expression with the highest ASCII or numeric value or the latest date from a list of character, numeric or date expressions.
        /// </summary>
        /// <remarks>
        /// MAX() (maximum) evaluates a set of expressions and returns the expression with the largest value.  
        /// When determining the maximum date value from a set of dates, MAX() returns the latest date.
        /// MAX() returns the character expression with the maximum ASCII value from a set of character expressions. 
        /// All the expressions must be of the same type (character, numeric or date).</remarks>
        /// <param name="src">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp1">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp2">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp3">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp4">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <returns>The hightest string, number or date of the list of passed expressions</returns>
        static public object Max(object src,
            object exp1, object exp2, object exp3, object exp4)
        {
            return DoMax(src,
                exp1, exp2, exp3, exp4);
        }

        /// <summary>
        /// Returns the expression with the highest ASCII or numeric value or the latest date from a list of character, numeric or date expressions.
        /// </summary>
        /// <remarks>
        /// MAX() (maximum) evaluates a set of expressions and returns the expression with the largest value.  
        /// When determining the maximum date value from a set of dates, MAX() returns the latest date.
        /// MAX() returns the character expression with the maximum ASCII value from a set of character expressions. 
        /// All the expressions must be of the same type (character, numeric or date).</remarks>
        /// <param name="src">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp1">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp2">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp3">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <returns>The hightest string, number or date of the list of passed expressions</returns>
        static public object Max(object src,
            object exp1, object exp2, object exp3)
        {
            return DoMax(src,
                exp1, exp2, exp3);
        }

        /// <summary>
        /// Returns the expression with the highest ASCII or numeric value or the latest date from a list of character, numeric or date expressions.
        /// </summary>
        /// <remarks>
        /// MAX() (maximum) evaluates a set of expressions and returns the expression with the largest value.  
        /// When determining the maximum date value from a set of dates, MAX() returns the latest date.
        /// MAX() returns the character expression with the maximum ASCII value from a set of character expressions. 
        /// All the expressions must be of the same type (character, numeric or date).</remarks>
        /// <param name="src">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp1">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp2">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <returns>The hightest string, number or date of the list of passed expressions</returns>
        static public object Max(object src,
            object exp1, object exp2)
        {
            return DoMax(src,
                exp1, exp2);
        }

        /// <summary>
        /// Returns the expression with the highest ASCII or numeric value or the latest date from a list of character, numeric or date expressions.
        /// </summary>
        /// <remarks>
        /// MAX() (maximum) evaluates a set of expressions and returns the expression with the largest value.  
        /// When determining the maximum date value from a set of dates, MAX() returns the latest date.
        /// MAX() returns the character expression with the maximum ASCII value from a set of character expressions. 
        /// All the expressions must be of the same type (character, numeric or date).</remarks>
        /// <param name="src">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <param name="exp1">Expression that is part of the set of expressions from which you want MAX() to return the expression with the highest value.</param>
        /// <returns>The hightest string, number or date of the list of passed expressions</returns>
        static public object Max(object src,
            object exp1)
        {
            return DoMax(src,
                exp1);
        }
        #endregion

        /// <summary>
        /// Following is a helper function that is really doing the 'MIN'. Our evaluator is able to handle varargs for builtin
        /// functions if all possible prototypes are exhibed.
        /// </summary>
        /// <param name="src">The first object of the list.</param>
        /// <param name="exp">The second and further objects of the list</param>
        /// <returns>The LOWER object in all the list</returns>
        [SuppressMessage("Microsoft.Performance", "CA1800")]
        static object DoMin(object src, params object[] exp)
        {
            if (src is string)
            {
                string ssrc = (string)src;
                foreach (string dst in exp)
                    if (ssrc.FoxCompare(dst, false) > 0)
                        ssrc = dst;
                return ssrc;
            }

            if (src is bool)
            {
                bool bsrc = (bool)src;
                if (!bsrc) return false;
                foreach (bool bdst in exp)
                    if (!bdst)
                        return false;
                return true;
            }
            if (src is DateTime)
            {
                DateTime dsrc = (DateTime)src;
                foreach (DateTime ddst in exp)
                    if (dsrc.CompareTo(ddst) > 0)
                        return dsrc = ddst;
                return dsrc;
            }

            Decimal nsrc = FoxConvert.ToDecimal(src);
            foreach (object dst in exp)
            {
                Decimal ndst = FoxConvert.ToDecimal(dst);
                if (nsrc > ndst)
                    nsrc = ndst;
            }
            return nsrc;
        }

        #region MIN's overrides

        /// <summary>
        /// Returns the expression with the lowest ASCII or numeric value or the latest date from a list of character, numeric or date expressions.
        /// </summary>
        /// <remarks>
        /// MIN() (minimum) evaluates a set of expressions and returns the expression with the minimum value.  
        /// When determining the minimum date value from a set of dates, MIN() returns the lowest date.
        /// MIN() returns the character expression with the maximum ASCII value from a set of character expressions. 
        /// All the expressions must be of the same type (character, numeric or date).</remarks>
        /// <param name="src">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp1">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp2">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp3">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp4">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp5">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp6">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp7">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp8">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp9">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp10">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp11">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp12">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp13">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp14">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp15">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp16">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp17">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp18">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp19">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp20">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp21">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp22">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp23">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp24">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <returns>The lowest string, number or date of the list of passed expressions</returns>
        static public object Min(object src,
            object exp1, object exp2, object exp3, object exp4, object exp5, object exp6, object exp7, object exp8,
            object exp9, object exp10, object exp11, object exp12, object exp13, object exp14, object exp15, object exp16,
            object exp17, object exp18, object exp19, object exp20, object exp21, object exp22, object exp23, object exp24)
        {
            return DoMin(src,
                exp1, exp2, exp3, exp4, exp5, exp6, exp7, exp8,
                exp9, exp10, exp11, exp12, exp13, exp14, exp15, exp16,
                exp17, exp18, exp19, exp20, exp21, exp22, exp23, exp24);
        }

        /// <summary>
        /// Returns the expression with the lowest ASCII or numeric value or the latest date from a list of character, numeric or date expressions.
        /// </summary>
        /// <remarks>
        /// MIN() (minimum) evaluates a set of expressions and returns the expression with the minimum value.  
        /// When determining the minimum date value from a set of dates, MIN() returns the lowest date.
        /// MIN() returns the character expression with the maximum ASCII value from a set of character expressions. 
        /// All the expressions must be of the same type (character, numeric or date).</remarks>
        /// <param name="src">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp1">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp2">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp3">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp4">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp5">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp6">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp7">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp8">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp9">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp10">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp11">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp12">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp13">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp14">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp15">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp16">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp17">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp18">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp19">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp20">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp21">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp22">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp23">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <returns>The lowest string, number or date of the list of passed expressions</returns>
        static public object Min(object src,
            object exp1, object exp2, object exp3, object exp4, object exp5, object exp6, object exp7, object exp8,
            object exp9, object exp10, object exp11, object exp12, object exp13, object exp14, object exp15, object exp16,
            object exp17, object exp18, object exp19, object exp20, object exp21, object exp22, object exp23)
        {
            return DoMin(src,
                exp1, exp2, exp3, exp4, exp5, exp6, exp7, exp8,
                exp9, exp10, exp11, exp12, exp13, exp14, exp15, exp16,
                exp17, exp18, exp19, exp20, exp21, exp22, exp23);
        }

        /// <summary>
        /// Returns the expression with the lowest ASCII or numeric value or the latest date from a list of character, numeric or date expressions.
        /// </summary>
        /// <remarks>
        /// MIN() (minimum) evaluates a set of expressions and returns the expression with the minimum value.  
        /// When determining the minimum date value from a set of dates, MIN() returns the lowest date.
        /// MIN() returns the character expression with the maximum ASCII value from a set of character expressions. 
        /// All the expressions must be of the same type (character, numeric or date).</remarks>
        /// <param name="src">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp1">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp2">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp3">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp4">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp5">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp6">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp7">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp8">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp9">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp10">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp11">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp12">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp13">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp14">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp15">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp16">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp17">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp18">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp19">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp20">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp21">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp22">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <returns>The lowest string, number or date of the list of passed expressions</returns>
        static public object Min(object src,
            object exp1, object exp2, object exp3, object exp4, object exp5, object exp6, object exp7, object exp8,
            object exp9, object exp10, object exp11, object exp12, object exp13, object exp14, object exp15, object exp16,
            object exp17, object exp18, object exp19, object exp20, object exp21, object exp22)
        {
            return DoMin(src,
                exp1, exp2, exp3, exp4, exp5, exp6, exp7, exp8,
                exp9, exp10, exp11, exp12, exp13, exp14, exp15, exp16,
                exp17, exp18, exp19, exp20, exp21, exp22);
        }

        /// <summary>
        /// Returns the expression with the lowest ASCII or numeric value or the latest date from a list of character, numeric or date expressions.
        /// </summary>
        /// <remarks>
        /// MIN() (minimum) evaluates a set of expressions and returns the expression with the minimum value.  
        /// When determining the minimum date value from a set of dates, MIN() returns the lowest date.
        /// MIN() returns the character expression with the maximum ASCII value from a set of character expressions. 
        /// All the expressions must be of the same type (character, numeric or date).</remarks>
        /// <param name="src">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp1">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp2">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp3">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp4">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp5">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp6">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp7">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp8">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp9">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp10">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp11">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp12">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp13">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp14">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp15">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp16">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp17">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp18">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp19">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp20">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp21">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <returns>The lowest string, number or date of the list of passed expressions</returns>
        static public object Min(object src,
            object exp1, object exp2, object exp3, object exp4, object exp5, object exp6, object exp7, object exp8,
            object exp9, object exp10, object exp11, object exp12, object exp13, object exp14, object exp15, object exp16,
            object exp17, object exp18, object exp19, object exp20, object exp21)
        {
            return DoMin(src,
                exp1, exp2, exp3, exp4, exp5, exp6, exp7, exp8,
                exp9, exp10, exp11, exp12, exp13, exp14, exp15, exp16,
                exp17, exp18, exp19, exp20, exp21);
        }

        /// <summary>
        /// Returns the expression with the lowest ASCII or numeric value or the latest date from a list of character, numeric or date expressions.
        /// </summary>
        /// <remarks>
        /// MIN() (minimum) evaluates a set of expressions and returns the expression with the minimum value.  
        /// When determining the minimum date value from a set of dates, MIN() returns the lowest date.
        /// MIN() returns the character expression with the maximum ASCII value from a set of character expressions. 
        /// All the expressions must be of the same type (character, numeric or date).</remarks>
        /// <param name="src">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp1">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp2">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp3">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp4">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp5">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp6">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp7">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp8">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp9">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp10">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp11">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp12">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp13">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp14">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp15">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp16">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp17">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp18">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp19">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp20">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <returns>The lowest string, number or date of the list of passed expressions</returns>
        static public object Min(object src,
            object exp1, object exp2, object exp3, object exp4, object exp5, object exp6, object exp7, object exp8,
            object exp9, object exp10, object exp11, object exp12, object exp13, object exp14, object exp15, object exp16,
            object exp17, object exp18, object exp19, object exp20)
        {
            return DoMin(src,
                exp1, exp2, exp3, exp4, exp5, exp6, exp7, exp8,
                exp9, exp10, exp11, exp12, exp13, exp14, exp15, exp16,
                exp17, exp18, exp19, exp20);
        }

        /// <summary>
        /// Returns the expression with the lowest ASCII or numeric value or the latest date from a list of character, numeric or date expressions.
        /// </summary>
        /// <remarks>
        /// MIN() (minimum) evaluates a set of expressions and returns the expression with the minimum value.  
        /// When determining the minimum date value from a set of dates, MIN() returns the lowest date.
        /// MIN() returns the character expression with the maximum ASCII value from a set of character expressions. 
        /// All the expressions must be of the same type (character, numeric or date).</remarks>
        /// <param name="src">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp1">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp2">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp3">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp4">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp5">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp6">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp7">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp8">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp9">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp10">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp11">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp12">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp13">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp14">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp15">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp16">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp17">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp18">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp19">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <returns>The lowest string, number or date of the list of passed expressions</returns>
        static public object Min(object src,
            object exp1, object exp2, object exp3, object exp4, object exp5, object exp6, object exp7, object exp8,
            object exp9, object exp10, object exp11, object exp12, object exp13, object exp14, object exp15, object exp16,
            object exp17, object exp18, object exp19)
        {
            return DoMin(src,
                exp1, exp2, exp3, exp4, exp5, exp6, exp7, exp8,
                exp9, exp10, exp11, exp12, exp13, exp14, exp15, exp16,
                exp17, exp18, exp19);
        }

        /// <summary>
        /// Returns the expression with the lowest ASCII or numeric value or the latest date from a list of character, numeric or date expressions.
        /// </summary>
        /// <remarks>
        /// MIN() (minimum) evaluates a set of expressions and returns the expression with the minimum value.  
        /// When determining the minimum date value from a set of dates, MIN() returns the lowest date.
        /// MIN() returns the character expression with the maximum ASCII value from a set of character expressions. 
        /// All the expressions must be of the same type (character, numeric or date).</remarks>
        /// <param name="src">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp1">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp2">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp3">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp4">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp5">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp6">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp7">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp8">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp9">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp10">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp11">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp12">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp13">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp14">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp15">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp16">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp17">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp18">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <returns>The lowest string, number or date of the list of passed expressions</returns>
        static public object Min(object src,
            object exp1, object exp2, object exp3, object exp4, object exp5, object exp6, object exp7, object exp8,
            object exp9, object exp10, object exp11, object exp12, object exp13, object exp14, object exp15, object exp16,
            object exp17, object exp18)
        {
            return DoMin(src,
                exp1, exp2, exp3, exp4, exp5, exp6, exp7, exp8,
                exp9, exp10, exp11, exp12, exp13, exp14, exp15, exp16,
                exp17, exp18);
        }

        /// <summary>
        /// Returns the expression with the lowest ASCII or numeric value or the latest date from a list of character, numeric or date expressions.
        /// </summary>
        /// <remarks>
        /// MIN() (minimum) evaluates a set of expressions and returns the expression with the minimum value.  
        /// When determining the minimum date value from a set of dates, MIN() returns the lowest date.
        /// MIN() returns the character expression with the maximum ASCII value from a set of character expressions. 
        /// All the expressions must be of the same type (character, numeric or date).</remarks>
        /// <param name="src">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp1">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp2">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp3">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp4">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp5">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp6">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp7">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp8">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp9">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp10">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp11">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp12">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp13">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp14">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp15">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp16">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp17">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <returns>The lowest string, number or date of the list of passed expressions</returns>
        static public object Min(object src,
            object exp1, object exp2, object exp3, object exp4, object exp5, object exp6, object exp7, object exp8,
            object exp9, object exp10, object exp11, object exp12, object exp13, object exp14, object exp15, object exp16,
            object exp17)
        {
            return DoMin(src,
                exp1, exp2, exp3, exp4, exp5, exp6, exp7, exp8,
                exp9, exp10, exp11, exp12, exp13, exp14, exp15, exp16,
                exp17);
        }

        /// <summary>
        /// Returns the expression with the lowest ASCII or numeric value or the latest date from a list of character, numeric or date expressions.
        /// </summary>
        /// <remarks>
        /// MIN() (minimum) evaluates a set of expressions and returns the expression with the minimum value.  
        /// When determining the minimum date value from a set of dates, MIN() returns the lowest date.
        /// MIN() returns the character expression with the maximum ASCII value from a set of character expressions. 
        /// All the expressions must be of the same type (character, numeric or date).</remarks>
        /// <param name="src">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp1">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp2">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp3">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp4">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp5">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp6">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp7">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp8">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp9">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp10">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp11">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp12">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp13">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp14">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp15">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp16">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <returns>The lowest string, number or date of the list of passed expressions</returns>
        static public object Min(object src,
            object exp1, object exp2, object exp3, object exp4, object exp5, object exp6, object exp7, object exp8,
            object exp9, object exp10, object exp11, object exp12, object exp13, object exp14, object exp15, object exp16)
        {
            return DoMin(src,
                exp1, exp2, exp3, exp4, exp5, exp6, exp7, exp8,
                exp9, exp10, exp11, exp12, exp13, exp14, exp15, exp16);
        }

        /// <summary>
        /// Returns the expression with the lowest ASCII or numeric value or the latest date from a list of character, numeric or date expressions.
        /// </summary>
        /// <remarks>
        /// MIN() (minimum) evaluates a set of expressions and returns the expression with the minimum value.  
        /// When determining the minimum date value from a set of dates, MIN() returns the lowest date.
        /// MIN() returns the character expression with the maximum ASCII value from a set of character expressions. 
        /// All the expressions must be of the same type (character, numeric or date).</remarks>
        /// <param name="src">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp1">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp2">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp3">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp4">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp5">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp6">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp7">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp8">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp9">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp10">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp11">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp12">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp13">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp14">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp15">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <returns>The lowest string, number or date of the list of passed expressions</returns>
        static public object Min(object src,
            object exp1, object exp2, object exp3, object exp4, object exp5, object exp6, object exp7, object exp8,
            object exp9, object exp10, object exp11, object exp12, object exp13, object exp14, object exp15)
        {
            return DoMin(src,
                exp1, exp2, exp3, exp4, exp5, exp6, exp7, exp8,
                exp9, exp10, exp11, exp12, exp13, exp14, exp15);
        }

        /// <summary>
        /// Returns the expression with the lowest ASCII or numeric value or the latest date from a list of character, numeric or date expressions.
        /// </summary>
        /// <remarks>
        /// MIN() (minimum) evaluates a set of expressions and returns the expression with the minimum value.  
        /// When determining the minimum date value from a set of dates, MIN() returns the lowest date.
        /// MIN() returns the character expression with the maximum ASCII value from a set of character expressions. 
        /// All the expressions must be of the same type (character, numeric or date).</remarks>
        /// <param name="src">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp1">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp2">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp3">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp4">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp5">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp6">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp7">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp8">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp9">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp10">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp11">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp12">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp13">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp14">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <returns>The lowest string, number or date of the list of passed expressions</returns>
        static public object Min(object src,
            object exp1, object exp2, object exp3, object exp4, object exp5, object exp6, object exp7, object exp8,
            object exp9, object exp10, object exp11, object exp12, object exp13, object exp14)
        {
            return DoMin(src,
                exp1, exp2, exp3, exp4, exp5, exp6, exp7, exp8,
                exp9, exp10, exp11, exp12, exp13, exp14);
        }

        /// <summary>
        /// Returns the expression with the lowest ASCII or numeric value or the latest date from a list of character, numeric or date expressions.
        /// </summary>
        /// <remarks>
        /// MIN() (minimum) evaluates a set of expressions and returns the expression with the minimum value.  
        /// When determining the minimum date value from a set of dates, MIN() returns the lowest date.
        /// MIN() returns the character expression with the maximum ASCII value from a set of character expressions. 
        /// All the expressions must be of the same type (character, numeric or date).</remarks>
        /// <param name="src">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp1">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp2">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp3">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp4">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp5">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp6">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp7">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp8">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp9">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp10">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp11">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp12">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp13">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <returns>The lowest string, number or date of the list of passed expressions</returns>
        static public object Min(object src,
            object exp1, object exp2, object exp3, object exp4, object exp5, object exp6, object exp7, object exp8,
            object exp9, object exp10, object exp11, object exp12, object exp13)
        {
            return DoMin(src,
                exp1, exp2, exp3, exp4, exp5, exp6, exp7, exp8,
                exp9, exp10, exp11, exp12, exp13);
        }

        /// <summary>
        /// Returns the expression with the lowest ASCII or numeric value or the latest date from a list of character, numeric or date expressions.
        /// </summary>
        /// <remarks>
        /// MIN() (minimum) evaluates a set of expressions and returns the expression with the minimum value.  
        /// When determining the minimum date value from a set of dates, MIN() returns the lowest date.
        /// MIN() returns the character expression with the maximum ASCII value from a set of character expressions. 
        /// All the expressions must be of the same type (character, numeric or date).</remarks>
        /// <param name="src">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp1">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp2">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp3">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp4">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp5">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp6">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp7">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp8">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp9">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp10">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp11">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp12">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <returns>The lowest string, number or date of the list of passed expressions</returns>
        static public object Min(object src,
            object exp1, object exp2, object exp3, object exp4, object exp5, object exp6, object exp7, object exp8,
            object exp9, object exp10, object exp11, object exp12)
        {
            return DoMin(src,
                exp1, exp2, exp3, exp4, exp5, exp6, exp7, exp8,
                exp9, exp10, exp11, exp12);
        }

        /// <summary>
        /// Returns the expression with the lowest ASCII or numeric value or the latest date from a list of character, numeric or date expressions.
        /// </summary>
        /// <remarks>
        /// MIN() (minimum) evaluates a set of expressions and returns the expression with the minimum value.  
        /// When determining the minimum date value from a set of dates, MIN() returns the lowest date.
        /// MIN() returns the character expression with the maximum ASCII value from a set of character expressions. 
        /// All the expressions must be of the same type (character, numeric or date).</remarks>
        /// <param name="src">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp1">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp2">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp3">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp4">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp5">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp6">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp7">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp8">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp9">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp10">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp11">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <returns>The lowest string, number or date of the list of passed expressions</returns>
        static public object Min(object src,
            object exp1, object exp2, object exp3, object exp4, object exp5, object exp6, object exp7, object exp8,
            object exp9, object exp10, object exp11)
        {
            return DoMin(src,
                exp1, exp2, exp3, exp4, exp5, exp6, exp7, exp8,
                exp9, exp10, exp11);
        }

        /// <summary>
        /// Returns the expression with the lowest ASCII or numeric value or the latest date from a list of character, numeric or date expressions.
        /// </summary>
        /// <remarks>
        /// MIN() (minimum) evaluates a set of expressions and returns the expression with the minimum value.  
        /// When determining the minimum date value from a set of dates, MIN() returns the lowest date.
        /// MIN() returns the character expression with the maximum ASCII value from a set of character expressions. 
        /// All the expressions must be of the same type (character, numeric or date).</remarks>
        /// <param name="src">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp1">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp2">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp3">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp4">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp5">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp6">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp7">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp8">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp9">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp10">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <returns>The lowest string, number or date of the list of passed expressions</returns>
        static public object Min(object src,
            object exp1, object exp2, object exp3, object exp4, object exp5, object exp6, object exp7, object exp8,
            object exp9, object exp10)
        {
            return DoMin(src,
                exp1, exp2, exp3, exp4, exp5, exp6, exp7, exp8,
                exp9, exp10);
        }

        /// <summary>
        /// Returns the expression with the lowest ASCII or numeric value or the latest date from a list of character, numeric or date expressions.
        /// </summary>
        /// <remarks>
        /// MIN() (minimum) evaluates a set of expressions and returns the expression with the minimum value.  
        /// When determining the minimum date value from a set of dates, MIN() returns the lowest date.
        /// MIN() returns the character expression with the maximum ASCII value from a set of character expressions. 
        /// All the expressions must be of the same type (character, numeric or date).</remarks>
        /// <param name="src">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp1">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp2">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp3">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp4">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp5">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp6">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp7">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp8">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp9">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <returns>The lowest string, number or date of the list of passed expressions</returns>
        static public object Min(object src,
            object exp1, object exp2, object exp3, object exp4, object exp5, object exp6, object exp7, object exp8,
            object exp9)
        {
            return DoMin(src,
                exp1, exp2, exp3, exp4, exp5, exp6, exp7, exp8,
                exp9);
        }

        /// <summary>
        /// Returns the expression with the lowest ASCII or numeric value or the latest date from a list of character, numeric or date expressions.
        /// </summary>
        /// <remarks>
        /// MIN() (minimum) evaluates a set of expressions and returns the expression with the minimum value.  
        /// When determining the minimum date value from a set of dates, MIN() returns the lowest date.
        /// MIN() returns the character expression with the maximum ASCII value from a set of character expressions. 
        /// All the expressions must be of the same type (character, numeric or date).</remarks>
        /// <param name="src">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp1">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp2">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp3">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp4">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp5">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp6">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp7">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp8">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <returns>The lowest string, number or date of the list of passed expressions</returns>
        static public object Min(object src,
            object exp1, object exp2, object exp3, object exp4, object exp5, object exp6, object exp7, object exp8)
        {
            return DoMin(src,
                exp1, exp2, exp3, exp4, exp5, exp6, exp7, exp8);
        }

        /// <summary>
        /// Returns the expression with the lowest ASCII or numeric value or the latest date from a list of character, numeric or date expressions.
        /// </summary>
        /// <remarks>
        /// MIN() (minimum) evaluates a set of expressions and returns the expression with the minimum value.  
        /// When determining the minimum date value from a set of dates, MIN() returns the lowest date.
        /// MIN() returns the character expression with the maximum ASCII value from a set of character expressions. 
        /// All the expressions must be of the same type (character, numeric or date).</remarks>
        /// <param name="src">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp1">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp2">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp3">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp4">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp5">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp6">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp7">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <returns>The lowest string, number or date of the list of passed expressions</returns>
        static public object Min(object src,
            object exp1, object exp2, object exp3, object exp4, object exp5, object exp6, object exp7)
        {
            return DoMin(src,
                exp1, exp2, exp3, exp4, exp5, exp6, exp7);
        }

        /// <summary>
        /// Returns the expression with the lowest ASCII or numeric value or the latest date from a list of character, numeric or date expressions.
        /// </summary>
        /// <remarks>
        /// MIN() (minimum) evaluates a set of expressions and returns the expression with the minimum value.  
        /// When determining the minimum date value from a set of dates, MIN() returns the lowest date.
        /// MIN() returns the character expression with the maximum ASCII value from a set of character expressions. 
        /// All the expressions must be of the same type (character, numeric or date).</remarks>
        /// <param name="src">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp1">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp2">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp3">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp4">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp5">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp6">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <returns>The lowest string, number or date of the list of passed expressions</returns>
        static public object Min(object src,
            object exp1, object exp2, object exp3, object exp4, object exp5, object exp6)
        {
            return DoMin(src,
                exp1, exp2, exp3, exp4, exp5, exp6);
        }

        /// <summary>
        /// Returns the expression with the lowest ASCII or numeric value or the latest date from a list of character, numeric or date expressions.
        /// </summary>
        /// <remarks>
        /// MIN() (minimum) evaluates a set of expressions and returns the expression with the minimum value.  
        /// When determining the minimum date value from a set of dates, MIN() returns the lowest date.
        /// MIN() returns the character expression with the maximum ASCII value from a set of character expressions. 
        /// All the expressions must be of the same type (character, numeric or date).</remarks>
        /// <param name="src">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp1">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp2">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp3">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp4">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp5">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <returns>The lowest string, number or date of the list of passed expressions</returns>
        static public object Min(object src,
            object exp1, object exp2, object exp3, object exp4, object exp5)
        {
            return DoMin(src,
                exp1, exp2, exp3, exp4, exp5);
        }

        /// <summary>
        /// Returns the expression with the lowest ASCII or numeric value or the latest date from a list of character, numeric or date expressions.
        /// </summary>
        /// <remarks>
        /// MIN() (minimum) evaluates a set of expressions and returns the expression with the minimum value.  
        /// When determining the minimum date value from a set of dates, MIN() returns the lowest date.
        /// MIN() returns the character expression with the maximum ASCII value from a set of character expressions. 
        /// All the expressions must be of the same type (character, numeric or date).</remarks>
        /// <param name="src">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp1">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp2">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp3">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp4">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <returns>The lowest string, number or date of the list of passed expressions</returns>
        static public object Min(object src,
            object exp1, object exp2, object exp3, object exp4)
        {
            return DoMin(src,
                exp1, exp2, exp3, exp4);
        }

        /// <summary>
        /// Returns the expression with the lowest ASCII or numeric value or the latest date from a list of character, numeric or date expressions.
        /// </summary>
        /// <remarks>
        /// MIN() (minimum) evaluates a set of expressions and returns the expression with the minimum value.  
        /// When determining the minimum date value from a set of dates, MIN() returns the lowest date.
        /// MIN() returns the character expression with the maximum ASCII value from a set of character expressions. 
        /// All the expressions must be of the same type (character, numeric or date).</remarks>
        /// <param name="src">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp1">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp2">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp3">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <returns>The lowest string, number or date of the list of passed expressions</returns>
        static public object Min(object src,
            object exp1, object exp2, object exp3)
        {
            return DoMin(src,
                exp1, exp2, exp3);
        }

        /// <summary>
        /// Returns the expression with the lowest ASCII or numeric value or the latest date from a list of character, numeric or date expressions.
        /// </summary>
        /// <remarks>
        /// MIN() (minimum) evaluates a set of expressions and returns the expression with the minimum value.  
        /// When determining the minimum date value from a set of dates, MIN() returns the lowest date.
        /// MIN() returns the character expression with the maximum ASCII value from a set of character expressions. 
        /// All the expressions must be of the same type (character, numeric or date).</remarks>
        /// <param name="src">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp1">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp2">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <returns>The lowest string, number or date of the list of passed expressions</returns>
        static public object Min(object src,
            object exp1, object exp2)
        {
            return DoMin(src,
                exp1, exp2);
        }

        /// <summary>
        /// Returns the expression with the lowest ASCII or numeric value or the latest date from a list of character, numeric or date expressions.
        /// </summary>
        /// <remarks>
        /// MIN() (minimum) evaluates a set of expressions and returns the expression with the minimum value.  
        /// When determining the minimum date value from a set of dates, MIN() returns the lowest date.
        /// MIN() returns the character expression with the maximum ASCII value from a set of character expressions. 
        /// All the expressions must be of the same type (character, numeric or date).</remarks>
        /// <param name="src">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <param name="exp1">Expression that is part of the set of expressions from which you want MIN() to return the expression with the lowest value.</param>
        /// <returns>The lowest string, number or date of the list of passed expressions</returns>
        static public object Min(object src,
            object exp1)
        {
            return DoMin(src,
                exp1);
        }
        #endregion
    }
}
